資料輸出的方式有兩種,一種是用scrapy crawl指令來輸出爬取的資料,另一種是在專案中的pipelines.py和settings.py檔案來設定輸出資料的檔案格式。
scrapy crawl指令
scrapy crawl 檔案名稱 -o 檔案名稱.json
scrapy crawl 檔案名稱 -o 檔案名稱.csv
scrapy crawl 檔案名稱 -o 檔案名稱.xml
pipelines.py和settings.py檔案
(1) pipelines.py檔案: 可以定義類別來指定匯出的檔案格式
from scrapy.exporters import JsonItemExporter
class JsonPipeline:
def __init__(self): #建立json檔案用JsonItemExporter物件匯入資料
self.file = open('pttstock2.csv', 'wb')
self.exporter = JsonItemExporter(self.file, encoding='big5')
self.exporter.start_exporting()
def process_item(self, item, spider): #在item中擷取的資料匯入json檔案
self.exporter.export_item(item)
return item
def close_spider(self, spider): #資料匯出後關閉檔案
self.exporter.finish_exporting()
self.file.close()
(2) settings.py檔案: 指定的Pipeline類別加入ITEM_PIPELINES中
ITEM_PIPELINES = {
'Stock.pipelines.StockPipeline': 300,
'Stock.pipelines.CsvPipeline': 500,
}
將爬取批批踢股票版的資料擷取後存入檔案。
scrapy crawl指令: 輸出成json格式的檔案注意!!!
在settings.py檔案中指定使用的編碼以免輸出中文字時會出現亂碼
#使用編碼
FEED_EXPORT_ENCODING = "utf-8"
pipelines.py和settings.py檔案: 設定輸出成csv格式的檔案
(1) pipelines.py檔案: 加入CsvPipeline類別來定義匯出資料到csv檔案的流程
from scrapy.exporters import CsvItemExporter
class CsvPipeline:
def __init__(self): #建立csv檔案用CsvItemExporter物件匯入資料
self.file = open('pttstock2.csv', 'wb')
self.exporter = CsvItemExporter(self.file, encoding='big5')
self.exporter.start_exporting()
def process_item(self, item, spider): #在item中擷取的資料匯入csv檔案
self.exporter.export_item(item)
return item
def close_spider(self, spider): #資料匯出後關閉檔案
self.exporter.finish_exporting()
self.file.close()
(2) settings.py檔案: 把CsvPipeline加入到ITEM_PIPELINES中
ITEM_PIPELINES = {
'Stock.pipelines.StockPipeline': 300,
'Stock.pipelines.CsvPipeline': 500,
}
輸出時使用指令:
scrapy crawl 檔案名稱